
package baseDeDatos;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author USUARIO
 */
public class BaseDeDatos {
    private Statement statement;
    private Connection conexion;
    private ResultSet rs;

    public Statement conectarConBD(String bd, String usuario, String clave)
    {
        setStatement(null);
        try {
            // Se registra el Driver de MySQL
        DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

        // Se obtiene una conexiÃ³n con la base de datos.
            setConexion(DriverManager.getConnection (bd, usuario, clave));

        // Se crea un Statement, para realizar la consulta
            setStatement(getConexion().createStatement());
        } catch (SQLException ex) {
            Logger.getLogger(BaseDeDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return getStatement();
    }
    
    public void ejecutarConsulta(String consulta)
    {
        try {
            setRs(getStatement().executeQuery(consulta));
        } catch (SQLException ex) {
            Logger.getLogger(BaseDeDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void ejecutarInsercion(String actualizacion)
    {
        try {
            getStatement().executeUpdate(actualizacion);
        } catch (SQLException ex) {
            Logger.getLogger(BaseDeDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void mostrarResultadoConsulta(int [] columnas)
    {
        try {
            // Se recorre el ResultSet, mostrando por pantalla los resultados.
            while (getRs().next())
            {
                //System.out.println (rs.getString (1) + " " + rs.getString (2)+
                //rs.getString (3)+ " " + rs.getString (4));
                System.out.println(resultadoUnaFila(columnas));
            }
        } catch (SQLException ex) {
            Logger.getLogger(BaseDeDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private String resultadoUnaFila(int[] columnas) throws SQLException
    {
        String resultado = "";
        for(int columna : columnas)
        {
            resultado += getRs().getString(columna) + " ";
        }
        
        return resultado;
    }
    
    public void cerrarConexion()
    {
        try {
            getConexion().close();
        } catch (SQLException ex) {
            Logger.getLogger(BaseDeDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void crearBaseDeDatos()
    {
        BaseDeDatos bd = new BaseDeDatos();
        
        bd.conectarConBD("jdbc:mysql://localhost/coches", "root", "santy");   
        bd.ejecutarConsulta("USE coches");
        bd.ejecutarInsercion("DROP TABLE modelos;");
        bd.ejecutarInsercion("CREATE TABLE modelos (idmodelos INT not null primary key auto_increment, modelo VARCHAR(200), precio INT, potencia INT, consumo VARCHAR(10), tamaño INT, maletero VARCHAR(10), fichatecnica VARCHAR(200), equipamiento VARCHAR(200) )");//(cod_M es el nombre de la columna, no admite nulos y es la clave principal)            
        bd.cerrarConexion();     
    }
    
    public void imprimirBaseDeDatos()
    {
        BaseDeDatos bd = new BaseDeDatos();
        
        bd.conectarConBD("jdbc:mysql://localhost/coches", "root", "santy");   
        bd.ejecutarConsulta("select * from modelos");
        int[] columnas = {1,2,3,4,5,6,7,8,9};
        bd.mostrarResultadoConsulta(columnas);
        bd.cerrarConexion();     
    }

    /**
     * @return the statement
     */
    public Statement getStatement() {
        return statement;
    }

    /**
     * @return the conexion
     */
    public Connection getConexion() {
        return conexion;
    }

    /**
     * @return the rs
     */
    public ResultSet getRs() {
        return rs;
    }

    /**
     * @param statement the statement to set
     */
    public void setStatement(Statement statement) {
        this.statement = statement;
    }

    /**
     * @param conexion the conexion to set
     */
    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

    /**
     * @param rs the rs to set
     */
    public void setRs(ResultSet rs) {
        this.rs = rs;
    }
    
}
